home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 255_01 / gpinitwt.asm < prev    next >
Encoding:
Assembly Source File  |  1988-03-28  |  2.6 KB  |  114 lines

  1.           page   80,132
  2.           page
  3. ;
  4. ;       EGA Graphic Primitive for Microsoft C 3.0, Version 01APR86.
  5. ;       (C) 1986 by Kent Cedola, 2015 Meadow Lake Ct., Norfolk, VA, 23518
  6. ;
  7.  
  8. stackval  struc
  9.           dw     ?
  10.           dw     ?
  11. x_coor    dw     ?
  12. y_coor    dw     ?
  13. x_len     dw     ?
  14. y_len     dw     ?
  15. page      dw     ?
  16. buffer    dw     ?
  17. dir       dw     ?
  18. stackval  ends
  19.  
  20. workarea  struc
  21. base      db     ?
  22. device    db     ?
  23. xorigin   dw     ?
  24. yorigin   dw     ?
  25. width     dw     ?
  26. height    dw     ?
  27. x         dw     ?
  28. y         dw     ?
  29. w         dw     ?
  30. h         dw     ?
  31. aspect1   dw     ?
  32. aspect2   dw     ?
  33. workarea  ends
  34.  
  35. dgroup    group  _data
  36.  
  37. _data     segment word public 'data'
  38.           assume ds:dgroup
  39.           public _xdwritbp
  40.           public _xdwritw1,_xdwritw2,_xdwritw3
  41.           public _xdwritb1
  42.  
  43.           extrn  _GDGSEG:word,_GDMERGE:byte
  44.  
  45. _xdwritbp dw     0
  46. _xdwritb1 db     0
  47. _xdwritb2 db     0
  48. _xdwritw1 dw     0
  49. _xdwritw2 dw     0
  50. _xdwritw3 dw     0
  51. _data     ends
  52.  
  53. _text     segment byte public 'code'
  54.  
  55.           assume cs:_text,ds:dgroup
  56.           public _gpinitwt
  57.  
  58. _gpinitwt proc   near
  59.  
  60.           push   bp
  61.           mov    bp,sp
  62.  
  63.           mov    ax,[bp].buffer
  64.           mov    _xdwritbp,ax
  65.           cmp    [bp].dir,0
  66.           jnz    bottotop
  67. toptobot:
  68.           mov    ax,5
  69.           mov    _xdwritw2,ax
  70.           mov    ax,[bp].y_coor
  71.           jmp    short cont
  72. bottotop:
  73.           mov    ax,-5
  74.           mov    _xdwritw2,ax
  75.           mov    ax,[bp].y_coor
  76.           add    ax,[bp].y_len
  77.           dec    ax
  78. cont:
  79.           mov    cx,ax
  80.           shl    ax,1
  81.           shl    ax,1
  82.           add    ax,cx
  83.           add    ax,_gdgseg
  84.           mov    dx,[bp].x_coor
  85.           mov    cx,dx
  86.           shr    dx,1                  ;   X / 8;
  87.           shr    dx,1                  ;   ...
  88.           shr    dx,1                  ;   ...
  89.           add    ax,dx
  90.           mov    _xdwritw1,ax
  91.  
  92.           mov    al,80h                ; Compute mask byte to first bit
  93.           and    cl,7                  ;   ...  (It has to be done this way to
  94.           ror    al,cl                 ;   ...   use merge value in write)
  95.           mov    _xdwritb1,al          ;   ...
  96.  
  97.           mov    ax,[bp].x_len
  98.           mov    _xdwritw3,ax
  99.  
  100.           mov    dx,03CEh              ; Load graphic controller's address port
  101.           mov    ah,_GDMERGE
  102.           mov    al,3
  103.           out    dx,ax
  104.           mov    ax,0205h
  105.           out    dx,ax
  106.  
  107.           pop    bp
  108.           ret
  109.  
  110. _gpinitwt endp
  111.  
  112. _text     ends
  113.           end
  114.